package com.stx.liuchang;

class AIManager {
    // 私有属性 - 封装内部数据结构
    private AIAssistant[] assistants;
    private int count;
    private final int capacity;

    // 构造方法
    public AIManager(int capacity) {
        this.capacity = capacity;
        this.assistants = new AIAssistant[capacity];
        this.count = 0;
        initializeDefaultAssistants();
    }

    // 私有方法 - 初始化默认助手
    private void initializeDefaultAssistants() {
        addAssistant(new VoiceAssistant("101", "小智", "v1.2", true, 85, "友好型"));
        addAssistant(new TextGenerationAssistant("102", "文小助", "v2.0", true, 92, 1000));
        addAssistant(new ImageGenerationAssistant("103", "图灵", "v1.5", false, 88, "写实、卡通、抽象"));
        addAssistant(new DataAnalysisAssistant("104", "数小析", "v1.0", true, 79, "CSV, JSON, XML"));
        addAssistant(new TranslationAssistant("105", "翻译精灵", "v2.1", false, 95, "中英日韩法"));
    }

    // 公共方法 - 添加助手
    public boolean addAssistant(AIAssistant assistant) {
        if (count >= capacity) {
            System.out.println("❌ 助手数量已达上限，无法添加新助手。");
            return false;
        }

        // 检查ID是否已存在
        if (findAssistantById(assistant.getId()) != null) {
            System.out.println("❌ 已存在相同ID的助手，添加失败。");
            return false;
        }

        assistants[count++] = assistant;
        System.out.println("✅ 助手【" + assistant.getName() + "】添加成功！");
        return true;
    }

    // 公共方法 - 根据ID查找助手
    public AIAssistant findAssistantById(String id) {
        for (int i = 0; i < count; i++) {
            if (assistants[i].getId().equals(id)) {
                return assistants[i];
            }
        }
        return null;
    }

    // 公共方法 - 删除助手
    public boolean deleteAssistant(String id) {
        for (int i = 0; i < count; i++) {
            if (assistants[i].getId().equals(id)) {
                String name = assistants[i].getName();
                // 将后面的元素前移
                for (int j = i; j < count - 1; j++) {
                    assistants[j] = assistants[j + 1];
                }
                assistants[count - 1] = null;
                count--;
                System.out.println("✅ 助手【" + name + "】已删除。");
                return true;
            }
        }
        System.out.println("❌ 未找到ID为 " + id + " 的助手。");
        return false;
    }

    // 公共方法 - 显示所有助手
    public void displayAllAssistants() {
        if (count == 0) {
            System.out.println("当前没有助手。");
            return;
        }

        System.out.println("所有AI助手列表：");
        for (int i = 0; i < count; i++) {
            System.out.println((i + 1) + ". " + assistants[i].getSimpleInfo() + " [" + assistants[i].getType() + "]");
        }
    }

    // 公共方法 - 启动助手服务
    public boolean startAssistantService(String id) {
        AIAssistant assistant = findAssistantById(id);
        if (assistant != null) {
            if (assistant.isOnline()) {
                System.out.println("助手【" + assistant.getName() + "】已在运行。");
            } else {
                assistant.setOnline(true);
                System.out.println("✅ 助手【" + assistant.getName() + "】已启动。");
            }
            return true;
        }
        System.out.println("❌ 未找到ID为 " + id + " 的助手。");
        return false;
    }

    // 公共方法 - 停止助手服务
    public boolean stopAssistantService(String id) {
        AIAssistant assistant = findAssistantById(id);
        if (assistant != null) {
            if (!assistant.isOnline()) {
                System.out.println("助手【" + assistant.getName() + "】已处于停止状态。");
            } else {
                assistant.setOnline(false);
                System.out.println("✅ 助手【" + assistant.getName() + "】已停止。");
            }
            return true;
        }
        System.out.println("❌ 未找到ID为 " + id + " 的助手。");
        return false;
    }

    // 公共方法 - 分配任务给助手
    public boolean assignTask(String id, String task) {
        AIAssistant assistant = findAssistantById(id);
        if (assistant != null) {
            assistant.performTask(task);
            return true;
        }
        System.out.println("❌ 未找到ID为 " + id + " 的助手。");
        return false;
    }

    // 公共方法 - 显示系统统计信息
    public void displayStatistics() {
        int onlineCount = 0;
        int totalScore = 0;

        for (int i = 0; i < count; i++) {
            if (assistants[i].isOnline()) {
                onlineCount++;
            }
            totalScore += assistants[i].getScore();
        }

        double averageScore = count > 0 ? (double) totalScore / count : 0;

        System.out.println("系统统计信息：");
        System.out.println("总助手数: " + count);
        System.out.println("在线助手数: " + onlineCount);
        System.out.println("离线助手数: " + (count - onlineCount));
        System.out.printf("平均能力评分: %.2f\n", averageScore);
    }

    // 公共方法 - 修改助手信息
    public boolean modifyAssistant(String id, String attribute, String value) {
        AIAssistant assistant = findAssistantById(id);
        if (assistant != null) {
            try {
                switch (attribute.toLowerCase()) {
                    case "name":
                        assistant.setName(value);
                        break;
                    case "type":
                        assistant.setType(value);
                        break;
                    case "version":
                        assistant.setVersion(value);
                        break;
                    case "online":
                        assistant.setOnline(value.equals("1") || value.equalsIgnoreCase("true"));
                        break;
                    case "score":
                        assistant.setScore(Integer.parseInt(value));
                        break;
                    default:
                        System.out.println("❌ 不支持的属性: " + attribute);
                        return false;
                }
                System.out.println("✅ 助手【" + id + "】修改成功！");
                return true;
            } catch (Exception e) {
                System.out.println("❌ 修改失败: " + e.getMessage());
                return false;
            }
        }
        System.out.println("❌ 未找到ID为 " + id + " 的助手。");
        return false;
    }

    // 公共方法 - 获取助手数量
    public int getAssistantCount() {
        return count;
    }

    // 公共方法 - 获取最大容量
    public int getCapacity() {
        return capacity;
    }
}
